/**
 * 把数字翻译成字符串
 * 
 * 描述

有一种将字母编码成数字的方式：'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字，返回有多少种可能的译码结果

数据范围：字符串长度满足 
0
<
n
≤
90
0<n≤90
进阶：空间复杂度 
O
(
n
)
O(n)，时间复杂度 
O
(
n
)
O(n)
 */
public class 把数字翻译成字符串 {
    
    public static void main(String[] args) {
        
        System.out.println(solve("12"));

    }
    
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public static int solve (String nums) {
        // write code here

        if(nums.length() == 0 || nums.charAt(0) == '0')
            return 0;
        int[] dp = new int[nums.length()];
        dp[0] = 1;
        for(int i = 1; i < dp.length; i++){
            if(nums.charAt(i) != '0'){
                dp[i] = dp[i-1];
            }
            //  3 2 4
            int num = (nums.charAt(i-1)-'0')*10 + (nums.charAt(i)-'0');
            if(num >= 10 && num <= 26){
                if(i == 1){
                    dp[i] += 1;
                }else{
                    dp[i] += dp[i-2];
                }
            }
        }
        return dp[nums.length()-1];
    }
}
